package srv;

import java.util.ArrayList;
import java.util.List;

import beans.CondicionVentaBean;
import beans.ItemListaPreciosBean;
import beans.ListaPreciosBean;
import beans.ProveedorBean;
import beans.RodamientoBean;

import dao.HibernateListaPreciosBeanDAO;
import entities.CondicionVentaEntity;
import entities.ItemListaPreciosEntity;
import entities.ListaPreciosEntity;
import entities.ProveedorEntity;
import entities.RodamientoEntity;

public class ListaPreciosSRV 
{
	private static HibernateListaPreciosBeanDAO dao;
	private static ListaPreciosSRV instancia;
	
	static 
	{
		dao = HibernateListaPreciosBeanDAO.getInstancia();
	}
	
	public static ListaPreciosSRV getInstancia()
	{
		if (instancia == null)
		{
			instancia = new ListaPreciosSRV();
		}
		return instancia;
	}
	
	public ListaPreciosEntity pasadoDesdeBean ( ListaPreciosBean listaPreciosBean )
	{
		ListaPreciosEntity listaPrecios = new ListaPreciosEntity();
		listaPrecios.setCantidad( listaPreciosBean.getCantidad());
		
		List<CondicionVentaEntity> conVentaEntity = new ArrayList<CondicionVentaEntity>();
		List<CondicionVentaBean> conVentaBean = listaPreciosBean.getcondicionesDeVenta();
		
		for( CondicionVentaBean cvb : conVentaBean )
		{
			CondicionVentaEntity cve = new CondicionVentaEntity();
			cve.setDescuento(cvb.getDescuento());
			cve.setDiasFinanciacion(cvb.getDiasFinanciacion());
			cve.setRecargo(cvb.getRecargo());
			cve.setTipo(cvb.getTipo());
			
			conVentaEntity.add(cve);
		}
		listaPrecios.setCondicionDeVenta(conVentaEntity);

		listaPrecios.setFechaVencimiento( listaPrecios.getFechaVencimiento());
		listaPrecios.setProveedor(ProveedorSRV.getInstancia().pasadoDesdeBean(listaPreciosBean.getProveedor()));
		
		List<ItemListaPreciosEntity> items = new ArrayList<ItemListaPreciosEntity>();
		for( ItemListaPreciosBean itemBean : listaPreciosBean.getItems() )
		{
			ItemListaPreciosEntity item = new ItemListaPreciosEntity();
			item.setCantidad( itemBean.getCantidad());
			item.setDescuento( itemBean.getDescuento());
			item.setFechaVencimiento( itemBean.getFechaVencimiento());
			/*
			ListaPreciosEntity listaPreciosItem = ListaPreciosSRV.getInstancia().pasadoDesdeBean( itemBean.getListaDePrecios());
			item.setListaPrecios(listaPreciosItem);
			*/
			item.setPrecio( itemBean.getPrecio());
			
			RodamientoEntity rodamiento = RodamientoSRV.getInstancia().pasadoDesdeBean( itemBean.getRodamiento());
			item.setRodamiento(rodamiento);
			
			item.setStockDisponible( itemBean.getStockDisponible());
			
			items.add( item );
		}
		
		listaPrecios.setStockDisponible( listaPreciosBean.getStockDisponible());
		
		return listaPrecios;
	}
		
	public ListaPreciosBean pasadoDesdeEntity ( ListaPreciosEntity listaPreciosEntity )
	{
		ListaPreciosBean listaPrecios = new ListaPreciosBean();
		listaPrecios.setCantidad( listaPreciosEntity.getCantidad());
			
		List<CondicionVentaBean> conVentaBean = new ArrayList<CondicionVentaBean>();
		List<CondicionVentaEntity> conVentaEntity = listaPreciosEntity.getCondicionDeVenta();
			
		for( CondicionVentaEntity cve : conVentaEntity )
		{
			CondicionVentaBean cvb = new CondicionVentaBean();
			cvb.setDescuento(cve.getDescuento());
			cvb.setDiasFinanciacion(cve.getDiasFinanciacion());
			cvb.setRecargo(cve.getRecargo());
			cvb.setTipo(cve.getTipo());
				
			conVentaBean.add(cvb);
		}
		listaPrecios.setCondicionesDeVenta(conVentaBean);
			
		listaPrecios.setFechaVencimiento( listaPrecios.getFechaVencimiento());
		//listaPrecios.setId( listaPreciosEntity.getId());
			
		List<ItemListaPreciosBean> items = new ArrayList<ItemListaPreciosBean>();
		for( ItemListaPreciosEntity itemEntity : listaPreciosEntity.getItems() )
		{
			ItemListaPreciosBean item = new ItemListaPreciosBean();
			item.setCantidad( itemEntity.getCantidad());
			item.setDescuento( itemEntity.getDescuento());
			item.setFechaVencimiento( itemEntity.getFechaVencimiento());
				
			/*
			ListaPreciosBean listaPreciosItem = ListaPreciosSRV.getInstancia().pasadoDesdeEntity( itemEntity.getListaDePrecios());
			item.setListaDePrecios(listaPreciosItem);
			*/
			item.setPrecio( itemEntity.getPrecio());
				
			ProveedorBean proveedor = ProveedorSRV.getInstancia().pasadoDesdeEntity( itemEntity.getProveedor());
			item.setProveedor(proveedor);
				
			RodamientoBean rodamiento = RodamientoSRV.getInstancia().pasadoDesdeEntity( itemEntity.getRodamiento());
			item.setRodamiento(rodamiento);
				
			item.setStockDisponible( itemEntity.getStockDisponible());
				
			items.add( item );
		}
		
		listaPrecios.setPrecio( listaPreciosEntity.getPrecio());
		
		ProveedorBean proveedor = ProveedorSRV.getInstancia().pasadoDesdeEntity( listaPreciosEntity.getProveedor());
		listaPrecios.setProveedor(proveedor);
		
		listaPrecios.setStockDisponible( listaPreciosEntity.getStockDisponible());
		
		return listaPrecios;
	}
	
	public void guardarListaPrecios( ListaPreciosBean listaPrecios )
	{
		ListaPreciosEntity lp = this.pasadoDesdeBean(listaPrecios);
		dao.guardarListaPrecios( lp );
	}
	
	public ListaPreciosBean obtenerListaPrecios( ProveedorBean proveedor )
	{
		ProveedorEntity p = ProveedorSRV.getInstancia().pasadoDesdeBean(proveedor);
		ListaPreciosEntity lpe = dao.obtenerListaPrecios( p );
		
		ListaPreciosBean lpb = this.pasadoDesdeEntity( lpe );
		return lpb;
	}
	
	public List<ListaPreciosBean> obtenerListasVigentes()
	{
		List<ListaPreciosEntity> listasVigentes = dao.obtenerListasVigentes();
		List<ListaPreciosBean> lvb = new ArrayList<ListaPreciosBean>();
		
		for( ListaPreciosEntity lpe : listasVigentes )
		{
			ListaPreciosBean lpb = new ListaPreciosBean();
			lpb.setCantidad(lpe.getCantidad());
			
			List<CondicionVentaBean> conVentaBean = new ArrayList<CondicionVentaBean>();
			List<CondicionVentaEntity> conVentaEntity = lpe.getCondicionDeVenta();
			
			for( CondicionVentaEntity cve : conVentaEntity )
			{
				CondicionVentaBean cvb = new CondicionVentaBean();
				cvb.setDescuento( cve.getDescuento() );
				cvb.setDiasFinanciacion( cve.getDiasFinanciacion() );
				cvb.setRecargo( cve.getRecargo() );
				cvb.setTipo( cve.getTipo() );
				
				conVentaBean.add( cvb );
			}
	
			lpb.setCondicionesDeVenta( conVentaBean );
			lpb.setFechaVencimiento( lpe.getFechaVencimiento() );
			
			List<ItemListaPreciosBean> listaItemsBean = new ArrayList<ItemListaPreciosBean>();
			List<ItemListaPreciosEntity> listaItemsEntity = lpe.getItems();
			
			for( ItemListaPreciosEntity ilpe : listaItemsEntity )
			{
				ItemListaPreciosBean ilpb = new ItemListaPreciosBean();
				ilpb.setCantidad( ilpe.getCantidad() );
				ilpb.setDescuento( ilpe.getDescuento() );
				ilpb.setFechaVencimiento( ilpe.getFechaVencimiento() );
				ilpb.setNroDeSerie( ilpe.getNroDeSerie() );
				ilpb.setPrecio( ilpe.getPrecio() );
				ilpb.setRodamiento( RodamientoSRV.getInstancia().pasadoDesdeEntity( ilpe.getRodamiento() ) );
				ilpb.setStockDisponible( ilpe.getStockDisponible() );
				
				listaItemsBean.add( ilpb );
			}
			lpb.setItems( listaItemsBean );
			lpb.setPrecio( lpe.getPrecio() );
			lpb.setProveedor( ProveedorSRV.getInstancia().pasadoDesdeEntity( lpe.getProveedor() ) );
			lpb.setStockDisponible( lpe.getStockDisponible() );
			
			lvb.add(lpb);
		}
		
		return lvb;
	}
}
